package gob.osinerg.seguridad.dao;

import gob.osinerg.emergencia.bean.ActividadBean;
import gob.osinerg.emergencia.bean.UnidadOperativaBean;
import gob.osinerg.emergencia.bean.UsuarioBean;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import org.apache.log4j.Logger;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;



public class SeguridadDAOImpl extends HibernateDaoSupport implements SeguridadDAO {
	private Logger log = Logger.getLogger(SeguridadDAOImpl.class);
	
	public ActividadBean getActividaXUnidad(String codigo) throws Exception {
		Connection conn= null;
		ResultSet rs = null;
        PreparedStatement pstm = null;
        ActividadBean actividad = null;
        String sql="SELECT A.ID, A.DESCRIPCION  FROM SFH_UNDDES_ACTVDDES UA, SFH_ACTVDDES A, SFH_CDGOS_DGH DGH "+
					"WHERE 1= 1 "+
					"AND UA.ACTIVI_ID =A.ID "+
					"AND UA.ID =  DGH.UNIACT_ID " +
					"AND UA.ESTADO = 'HA' " +
					"AND DGH.ESTADO = 'RV' "+
					"AND UA.UNIOPE_ID = ? ";       
	    
	    try{
	    	conn = getSession().connection();
	    	pstm = conn.prepareStatement(sql);
	    	pstm.setLong(1, Long.parseLong(codigo));
	    	rs = pstm.executeQuery();
	    	while (rs.next()) {
	    		actividad = new ActividadBean();
	    		actividad.setCodigo(rs.getString("ID"));
	    		actividad.setDescripcion(rs.getString("DESCRIPCION"));
			}
	    	pstm.close();
	    	rs.close();
	    	conn.close();
	    	rs = null;
	    	rs = null;
	    	conn = null;
	    }catch (Exception e) {
			log.error(e);
		}finally{
			if (rs != null) {
			      try { rs.close(); } catch (SQLException e) { ; }
			      rs = null;
			    }
			    if (pstm != null) {
			      try { pstm.close(); } catch (SQLException e) { ; }
			      pstm = null;
			    }
			    if (conn != null) {
			      try { conn.close(); } catch (SQLException e) { ; }
			      conn = null;
			    }	
		}
	  
		return actividad;
	}

	public UnidadOperativaBean getUnidadOperativaXCodigoOsinerg(int codigo)
			throws Exception {
		Connection conn = null;
		ResultSet rs = null;
		PreparedStatement pstm = null;
		UnidadOperativaBean unidad = null;
		// String
		// sql="SELECT ID, CODIGO_OSINERG, NMBRE_UNDAD, RUC, DIRECCION, TO_CHAR(LPAD(UBIGEO_ID,6,0)) AS UBIGEO, DMCLIO_LGAL, TO_CHAR(LPAD(UBIGEO_ID2,6,0)) AS UBIGEO2 FROM SFH_UNDDES_OPRTVAS WHERE CODIGO_OSINERG=?";
		StringBuffer sql = new StringBuffer();
		sql.append("SELECT UO.ID                                      , ");
		sql.append("       UO.CODIGO_OSINERG                          , ");
		sql.append("       UO.NMBRE_UNDAD                             , ");
		sql.append("       UO.RUC                                     , ");
		sql.append("       UO.DIRECCION                               , ");
		sql.append("       TO_CHAR(LPAD(UO.UBIGEO_ID,6,0)) AS UBIGEO  , ");
		sql.append("       UO.DMCLIO_LGAL                             , ");
		sql.append("       TO_CHAR(LPAD(UO.UBIGEO_ID2,6,0)) AS UBIGEO2, ");
		sql.append("       DGH.CDGO_DGH ");
		sql.append("FROM   SFH_UNDDES_OPRTVAS UO , ");
		sql.append("       SFH_UNDDES_ACTVDDES UA, ");
		sql.append("       SFH_CDGOS_DGH DGH ");
		sql.append("WHERE  1     = 1 ");
		sql.append("AND    UO.ID = UA.UNIOPE_ID ");
		sql.append("AND    UA.ID = DGH.UNIACT_ID ");
		sql.append("AND    UO.CODIGO_OSINERG = ? ");
		try {
			conn = getSession().connection();
			pstm = conn.prepareStatement(sql.toString());
			pstm.setInt(1, codigo);
			rs = pstm.executeQuery();
			while (rs.next()) {
				unidad = new UnidadOperativaBean();
				unidad.setCodigo(rs.getString("ID"));
				unidad.setCodigoOsinerg(rs.getString("CODIGO_OSINERG"));
				unidad.setNombreComercial(rs.getString("NMBRE_UNDAD"));
				unidad.setRuc(rs.getString("RUC"));
				unidad.setDireccion(rs.getString("DIRECCION"));
				unidad.setUbigeoId(rs.getString("UBIGEO"));
				// unidad.set(StringUtil.nullAsEmptyString(rs.getString("DMCLIO_LGAL")));
				// unidad.setUbigeoLegal(StringUtil.nullAsEmptyString(rs.getString("UBIGEO2")));
				unidad.setCodigoDGH(rs.getString("CDGO_DGH"));

			}
			pstm.close();
			rs.close();
			conn.close();
			rs = null;
			rs = null;
			conn = null;
		} catch (Exception e) {
			log.error(e);
		} finally {
			if (rs != null) {
				try {
					rs.close();
				} catch (SQLException e) {
					;
				}
				rs = null;
			}
			if (pstm != null) {
				try {
					pstm.close();
				} catch (SQLException e) {
					;
				}
				pstm = null;
			}
			if (conn != null) {
				try {
					conn.close();
				} catch (SQLException e) {
					;
				}
				conn = null;
			}
		}

		return unidad;
	}

	public UsuarioBean getUsuarioXCodigo(String idusuario) throws Exception {
		Connection conn= null;
		ResultSet rs = null;
        PreparedStatement pstm = null;
		UsuarioBean beanUsuario = null;
	    String sql = "SELECT CODIGO, LOGIN, NOMBRE FROM SEG_USUARIO WHERE login=? AND ESTADO = 'A' ";
	    
	    try{
	    	conn = getSession().connection();
	    	pstm = conn.prepareStatement(sql);
	    	pstm.setString(1, idusuario);
	    	rs = pstm.executeQuery();
	    	while (rs.next()) {
				beanUsuario = new UsuarioBean();
				beanUsuario.setCodigoUsuario(rs.getString("CODIGO"));
				beanUsuario.setNombre(rs.getString("NOMBRE"));
				beanUsuario.setCodigoLogin(rs.getString("LOGIN"));
	
			}
	    	pstm.close();
	    	rs.close();
	    	conn.close();
	    	rs = null;
	    	rs = null;
	    	conn = null;
	    }catch (Exception e) {
			log.error(e);
		}finally{
			if (rs != null) {
			      try { rs.close(); } catch (SQLException e) { ; }
			      rs = null;
			    }
			    if (pstm != null) {
			      try { pstm.close(); } catch (SQLException e) { ; }
			      pstm = null;
			    }
			    if (conn != null) {
			      try { conn.close(); } catch (SQLException e) { ; }
			      conn = null;
			    }		
		}
	  
			return beanUsuario;
	  }

	public String getIdUnidadOperativaIdByCodigoUsuario(String codigoUsuario)throws Exception {
		Connection conn= null;
		ResultSet rs = null;
        PreparedStatement pstm = null;
        String idUnidadOpe="";
	    String sql = "SELECT UUO.UNIOPE_ID AS CODIGO_UNIDAD FROM USUA_UNOP_UUO UUO WHERE UUO.UUO_USUAID = ? ";
	    
	    try{
	    	conn = getSession().connection();
	    	pstm = conn.prepareStatement(sql);
	    	pstm.setString(1, codigoUsuario);
	    	rs = pstm.executeQuery();
	    	while (rs.next()) {
	    		idUnidadOpe = rs.getString("CODIGO_UNIDAD");
	
			}
	    	pstm.close();
	    	rs.close();
	    	conn.close();
	    	rs = null;
	    	rs = null;
	    	conn = null;
	    }catch (Exception e) {
			log.error(e);
		}finally{
			if (rs != null) {
			      try { rs.close(); } catch (SQLException e) { ; }
			      rs = null;
			    }
			    if (pstm != null) {
			      try { pstm.close(); } catch (SQLException e) { ; }
			      pstm = null;
			    }
			    if (conn != null) {
			      try { conn.close(); } catch (SQLException e) { ; }
			      conn = null;
			    }		
		}
	  
			return idUnidadOpe;
	}


	public UnidadOperativaBean getUnidadOperativoByUniopeId(
			String idUnidadOperativa) throws Exception {
		Connection conn= null;
		ResultSet rs = null;
        PreparedStatement pstm = null;
        UnidadOperativaBean unidad = null;
        //String sql="SELECT ID, CODIGO_OSINERG, NMBRE_UNDAD, RUC, DIRECCION, TO_CHAR(LPAD(UBIGEO_ID,6,0)) AS UBIGEO, DMCLIO_LGAL, TO_CHAR(LPAD(UBIGEO_ID2,6,0)) AS UBIGEO2 FROM SFH_UNDDES_OPRTVAS WHERE ID = ? ";       
        StringBuffer sql = new StringBuffer();
        sql.append("SELECT UO.ID                                      , ");
        sql.append("       UO.CODIGO_OSINERG                          , ");
        sql.append("       UO.NMBRE_UNDAD                             , ");
        sql.append("       UO.RUC                                     , ");
        sql.append("       UO.DIRECCION                               , ");
        sql.append("       TO_CHAR(LPAD(UO.UBIGEO_ID,6,0)) AS UBIGEO  , ");
        sql.append("       UO.DMCLIO_LGAL                             , ");
        sql.append("       TO_CHAR(LPAD(UO.UBIGEO_ID2,6,0)) AS UBIGEO2, ");
        sql.append("       DGH.CDGO_DGH ");
        sql.append("FROM   SFH_UNDDES_OPRTVAS UO , ");
        sql.append("       SFH_UNDDES_ACTVDDES UA, ");
        sql.append("       SFH_CDGOS_DGH DGH ");
        sql.append("WHERE  1     = 1 ");
        sql.append("AND    UO.ID = UA.UNIOPE_ID ");
        sql.append("AND    UA.ID = DGH.UNIACT_ID ");
        sql.append("AND    UO.ID = ? ");
	    try{
	    	conn = getSession().connection();
	    	pstm = conn.prepareStatement(sql.toString());
	    	pstm.setInt(1, Integer.parseInt(idUnidadOperativa));
	    	rs = pstm.executeQuery();
	    	while (rs.next()) {
				unidad = new UnidadOperativaBean();
				unidad.setCodigo(rs.getString("ID"));
				unidad.setCodigoOsinerg(rs.getString("CODIGO_OSINERG"));
				unidad.setNombreComercial(rs.getString("NMBRE_UNDAD"));
				unidad.setRuc(rs.getString("RUC"));
				unidad.setDireccion(rs.getString("DIRECCION"));
				unidad.setUbigeoId(rs.getString("UBIGEO"));
				unidad.setCodigoDGH(rs.getString("CDGO_DGH"));
			}
	    	pstm.close();
	    	rs.close();
	    	conn.close();
	    	rs = null;
	    	rs = null;
	    	conn = null;
	    }catch (Exception e) {
			log.error(e);
		}finally{
			if (rs != null) {
			      try { rs.close(); } catch (SQLException e) { ; }
			      rs = null;
			    }
			    if (pstm != null) {
			      try { pstm.close(); } catch (SQLException e) { ; }
			      pstm = null;
			    }
			    if (conn != null) {
			      try { conn.close(); } catch (SQLException e) { ; }
			      conn = null;
			    }		
		}
	  
		return unidad;
	}
	
	
	}
	
	
	
	


